<template>
  <div class="app-container">
    <!-- 角色列表 -->
    <!--查询表单-->
    <div class="search-div">
      <el-form label-width="70px" >
        <!-- <el-row>
          <el-col :span="6">
            <el-form-item label="角色名称">
              <el-input
                style="width: 95%"
                v-model="searchObj.username"
                placeholder="请输入角色名称"
              ></el-input>
            </el-form-item>
          </el-col>
          <el-col :span="4">
            <div>
              <el-button
                class="primary-btn"
                @click="fetchData()"
                >搜索</el-button
              >
              <el-button  class="primary-btn"  @click="resetData"
                >重置</el-button
              >
            </div>
          </el-col>
        </el-row> -->
        <!-- <el-row style="display:flex">
            <el-button type="primary" icon="el-icon-search"   @click="fetchData()">搜索</el-button>
            <el-button icon="el-icon-refresh"  @click="resetData">重置</el-button>
          </el-row> -->
      </el-form>
    </div>
    <!-- 工具条 -->
  <div class="tools-div"  style="display: flex">
    <el-button class="custom-success-btn" @click="add">添 加</el-button>
    <!-- <el-button class="custom-danger-btn" @click="batchRemove()" >删 除</el-button> -->
  </div>
    <!-- 表格 @selection-change="handleSelectionChange" -->
    <el-table
      v-loading="listLoading"
      :data="list"
      stripe
      border
      style="width: 100%;margin-top: 10px;"
      >

      <!-- <el-table-column type="selection"/> -->

      <el-table-column
        label="序号"
        width="70"
        align="center">
        <template slot-scope="scope">
          {{ (page - 1) * limit + scope.$index + 1 }}
        </template>
      </el-table-column>

      <el-table-column prop="roleName" label="角色名称" />
      <el-table-column prop="roleCode" label="角色编码" />
      <el-table-column prop="description" label="描述" />
      <!-- <el-table-column prop="createTime" label="创建时间" width="160"/> -->
      <el-table-column label="操作" width="200" align="center">
        <template slot-scope="scope">
          <el-button type="primary" icon="el-icon-edit"  @click="edit(scope.row)" title="修改"/>
          <el-button type="danger" icon="el-icon-delete"  @click="removeDataById(scope.row.id)" title="删除"/>
          <!-- <el-button type="warning" icon="el-icon-baseball"  @click="showAssignAuth(scope.row)" title="分配权限"/> -->
        </template>
      </el-table-column>
    </el-table>

  <!-- 分页组件 -->
    <el-pagination
      :current-page="page"
      :total="total"
      :page-size="limit"
      style="padding: 30px 0; text-align: center;"
      layout="total, prev, pager, next, jumper"
      @current-change="fetchData"
    />

    <el-dialog title="添加" :visible.sync="dialogVisible" width="40%" >
          <el-form ref="dataForm" :rules="rule"  :model="sysRole" label-width="150px"  style="padding-right: 40px;">
            <el-form-item label="角色名称" prop="roleName">
              <el-input v-model="sysRole.roleName" />
            </el-form-item>
            <el-form-item label="角色编码" prop="roleCode">
              <el-input v-model="sysRole.roleCode"/>
            </el-form-item>
            <el-form-item label="描述" prop="description">
              <el-input type="textarea" :rows="3" v-model="sysRole.description"/>
            </el-form-item>
          </el-form>
          <span slot="footer" class="dialog-footer">
            <el-button @click="dialogVisible = false"  icon="el-icon-refresh-right">取 消</el-button>
            <el-button type="primary" icon="el-icon-check" @click="saveRole()" >确 定</el-button>
          </span>
    </el-dialog>
    <el-dialog title="编辑" :visible.sync="dialogVisible1" width="40%" >
          <el-form ref="dataForm1" :rules="rule" :model="sysRole1" label-width="150px"  style="padding-right: 40px;">
            <el-form-item label="角色名称" prop="roleName">
              <el-input v-model="sysRole1.roleName" />
            </el-form-item>
            <el-form-item label="角色编码" prop="roleCode">
              <el-input v-model="sysRole1.roleCode"/>
            </el-form-item>
            <el-form-item label="描述" prop="description">
              <el-input type="textarea" :rows="3" v-model="sysRole1.description"/>
            </el-form-item>
          </el-form>
          <span slot="footer" class="dialog-footer">
            <el-button @click="dialogVisible1 = false"  icon="el-icon-refresh-right">取 消</el-button>
            <el-button type="primary" icon="el-icon-check" @click="updateRole()" >确 定</el-button>
          </span>
    </el-dialog>
  </div>
</template>
<script>
//引入定义接口的js文件
import api from '@/api/system/role'
import {addrole,getrole,getrolepage,editrole,deleterole} from '@/api/table'

export default {
  //定义初始值
  data() {
    return {
      listLoading:false,//是否显示加载
      list:[],//角色列表
      total:0,//总记录数
      page:1,//当前页
      limit:8,//每页显示记录数
      searchObj:{username:''},//条件查询封装对象
      rule: {
        roleCode: [{ required: true, message: "请输入角色编码", trigger: "blur" }],
        roleName: [{ required: true, message: "请输入角色名称", trigger: "blur" }],
        description: [{ required: true, message: "请输入角色描述", trigger: "blur" }],
        // phone: [
        //   { required: true, message: "电话号码不能为空", trigger: "blur" },
        //   { validator: validatePhone, trigger: "blur" },
        // ],
      },
      dialogVisible: false,//弹出框
      dialogVisible1: false,//弹出框
      sysRole:{}, //封装添加表单数据
      sysRole1:{}, //封装添加表单数据
      selectValue:[] //复选框选择内容封装数组
    }
  },
  //页面渲染之前执行
  created() {
    //调用列表方法
    this.fetchData()
  },
  methods:{//具体方法
    //跳转分配菜单权限
    showAssignAuth(row) {
      this.$router.push('/system/assignAuth?id='+row.id+'&roleName='+row.roleName);
    },
    //复选框发生变化执行方法
    handleSelectionChange(selection) {
      this.selectValue = selection
      //console.log(this.selectValue)
    },
    //批量删除
    batchRemove() {
      //判断
      if(this.selectValue.length==0) {
        this.$message.warning('请选择要删除的记录！')
        return
      }
      this.$confirm('此操作将永久删除该角色, 是否继续?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          //数组
          var idList = []
          //获取多个复选框对应id，封装到数组里面
          // [1,2,3]
          for(var i=0;i<this.selectValue.length;i++) {
            var obj = this.selectValue[i]
            //id值
            var id = obj.id
            //放到数组里面
            idList.push(id)
          }
          api.batchRemove(idList).then(response => {
              //提示
              this.$message({
                type: 'success',
                message: '删除成功!'
              });
              //刷新
              this.fetchData()
          })
        })
    },
    //修改-数据回显
    edit(row) {
      //弹出框
      this.dialogVisible1 = true
      const a = JSON.stringify(row)
      this.sysRole1 = JSON.parse(a);
      // api.getRoleId(id).then(response => {
      //   this.sysRole = response.data
      // })
    },
    //点击确定
    saveOrUpdate() {
      //判断添加还是修改
      if(!this.sysRole.id) {
        //添加
        this.saveRole()
      } else {
        this.updateRole()
      }
    },
    //修改的方法
    updateRole() {
      this.$refs["dataForm1"].validate((valid) => {
        if (valid) {
          //   alert('submit!');
          console.log(this.sysRole1);
          this.dialogVisible1 = false;
          // this.list.push(this.sysRole);
          editrole(this.sysRole1).then((res) => {
            console.log(res);
            if (res.code == 200) {
              this.$message.success('修改成功！')
              this.fetchData()
            }
          })
        } else {
          console.log("error submit!!");
          return false;
        }
      });
      // dialogVisible1 = false
      // api.update(this.sysRole)
      //   .then(response => {
      //     //提示
      //     this.$message({
      //       type: 'success',
      //       message: '修改成功!'
      //     });
      //     //关闭弹框
      //     this.dialogVisible = false
      //     //刷新页面
      //     this.fetchData()
      //   })
    },
    //添加的方法
    saveRole() {
      // this.dialogVisible = false
      // this.list.push(this.sysRole)
      this.$refs["dataForm"].validate((valid) => {
        if (valid) {
          //   alert('submit!');
          console.log(this.sysRole);
          this.dialogVisible = false;
          // this.list.push(this.sysRole);
          addrole(this.sysRole).then((res) => {
            if (res.code == 200) {
              this.$message.success('新增成功！')
              this.fetchData()
            }
          })
        } else {
          console.log("error submit!!");
          return false;
        }
      });
      // api.saveRole(this.sysRole)
      //   .then(response => {
      //     //提示
      //     this.$message({
      //       type: 'success',
      //       message: '添加成功!'
      //     });
      //     //关闭弹框
      //     this.dialogVisible = false
      //     //刷新页面
      //     this.fetchData()
      //   })
    },
    //点击添加，弹出框
    add() {
      this.dialogVisible = true
      this.sysRole = {}
    },
    //删除
    removeDataById(id) {
       this.$confirm('此操作将永久删除该角色, 是否继续?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          //调用方法删除
          deleterole(id).then((res) => {
            if (res.code == 200) {
              this.$message.success('删除成功！')
              this.fetchData()
            }
          })
          // api.removeId(id)
          //   .then(response => {
          //     //提示
          //     this.$message({
          //       type: 'success',
          //       message: '删除成功!'
          //     });
          //     //刷新
          //     this.fetchData()
          // })
        })
    },
    //重置
    resetData() {
      //清空表单
      this.searchObj = {username:''}
      //查询所有数据
      // this.fetchData()
    },
    //条件分页查询列表
    //pageNum 查询页数
    fetchData(pageNum=1) {
      //页数赋值
      console.log(this.searchObj);
      getrolepage(pageNum,this.limit,this.searchObj).then((res) => {
        console.log(res);
        this.list = res.data.records
        this.total = res.data.total
      })
      // this.page = pageNum
      // //ajax
      // api.getPageList(this.page,this.limit,this.searchObj)
      //   .then(response => {
      //     //this.listLoading = false
      //     //console.log(response)
      //     //每页数据列表
      //     this.list = response.data.records
      //     //总记录数
      //     this.total = response.data.total
      //   })
    }
  }
}
</script>
<style lang="scss" scoped>
.custom-success-btn {
  width: 6.0625rem;
  height: 2.5rem;
  background-color: rgba(29, 183, 82, 0.74);
  border-radius: 0.3125rem;
  color: #fff;
  font-size: 1rem;
  box-shadow: 0 0.1875rem 0.3125rem rgba(0, 0, 0, 0.35);
  &:hover,
  &:focus {
    background: #1DB752;
    border-radius: 0.3125rem;
    color: #fff;
    box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.25);
  }
  &:active {
    box-shadow: 0 0.0625rem 0.1875rem rgba(0, 0, 0, 0.3);
  }
}
.custom-danger-btn {
  width: 6.0625rem;
  height: 2.5rem;
  background-color: rgba(225, 63, 31, 0.7);
  border-radius: 0.3125rem;
  color: #fff;
  font-size: 1rem;
  box-shadow: 0 0.1875rem 0.3125rem rgba(0, 0, 0, 0.35);
  &:hover,
  &:focus {
    background: #E13F1F;
    border-radius: 0.3125rem;
    color: #fff;
  }
}
.custom-primary-btn {
  width: 6.0625rem;
  height: 2.5rem;
  background-color: rgba(45, 107, 164, 0.7);
  border-radius: 0.3125rem;
  color: #fff;
  font-size: 1rem;
  box-shadow: 0 0.1875rem 0.3125rem rgba(0, 0, 0, 0.35);

  &:hover,
  &:focus {
    background: #2D6BA4;
    border-radius: 0.3125rem;
    color: #fff;
  }
}
.custom-info-btn {
  width: 6.0625rem;
  height: 2.5rem;
  background-color: rgba(31, 193, 189, 0.7);
  border-radius: 0.3125rem;
  color: #fff;
  font-size: 1rem;
  box-shadow: 0 0.1875rem 0.3125rem rgba(0, 0, 0, 0.35);

  &:hover,
  &:focus {
    background: #1FC1BD;
    border-radius: 0.3125rem;
    color: #fff;
  }
}

.custom-warning-btn {
  width: 6.0625rem;
  height: 2.5rem;
  background-color: rgba(26, 127, 221, 0.7);
  border-radius: 0.3125rem;
  color: #fff;
  font-size: 1rem;
  box-shadow: 0 0.1875rem 0.3125rem rgba(0, 0, 0, 0.35);

  &:hover,
  &:focus {
    background: #1A7FDD;
    border-radius: 0.3125rem;
    color: #fff;
  }
}
.primary-btn{
  width: 6.0625rem;
  height: 2.5rem;
  background-color: #205382;
  border-radius: 0.3125rem;
  color: #fff;
  font-size: 1rem;
}
.tools-div {
  text-align: left;
  margin-left: 2%;
}
</style>